public with sharing class GettingStartedController {

public Survey__c testSurvey {get;set;}
public Boolean testSurveyAvailable {get;set;}
public List<String>  questionIds {get;set;}

public GettingStartedController()
{
// make sure getting started survey doesn't already exist
    questionIds = new List<String>();
    try
    {
        testSurvey = [select Id, Name From Survey__c where Name='SurveyForce Sample Survey' LIMIT 1];
        testSurveyAvailable = true;
    }
    catch (Exception e)
    {
        testSurveyAvailable = false;
    }
    
}

public void makeTestSurvey()
{
    
    testSurvey = new Survey__c();
    testSurvey.Name = 'SurveyForce Sample Survey';
    testSurvey.Submit_Response__c = 'empty'; 
    testSurvey.Survey_Container_CSS__c = '#survey_container{ margin: 0 auto; width: 600px; box-shadow: 0 0 14px #CCCCCC; -moz-box-shadow: 0 0 14px #CCCCCC; -webkit-box-shadow: 0 0 14px #CCCCCC; }';
    insert testSurvey;
    
    questionIds.add(createQuestion(0));
    questionIds.add(createQuestion(1));
    questionIds.add(createQuestion(2));
    questionIds.add(createQuestion(3));
    
    createResponses();

    testSurveyAvailable = true;
    
}

public PageReference viewSurvey()
{
    return new PageReference('/Apex/SurveyManagerPage?id=' + testSurvey.Id);
}

public PageReference takeSurvey()
{
    return new PageReference('/Apex/TakeSurvey?id=' + testSurvey.Id + '&cId=none&caId=none');
}

public PageReference viewResults()
{
    ReportFinderUtil rfu = new ReportFinderUtil();
    String reportId = rfu.findReportId('Survey with Questions and Responses');  
    
    String surveyId = testSurvey.Id;
    surveyId = surveyId.substring(0,15);
    
    return new PageReference('/' + reportId + '?pv0=' + surveyId);
}

  private String createQuestion(Integer i){
    Survey_Question__c q = new Survey_Question__c();
    q.Name = 'Testing Question';
    q.Survey__c = testSurvey.Id;
    q.Type__c = getType(i);
    q.Choices__c = getChoices(i);
    q.Question__c = 'Testing Question question' + i;
    q.OrderNumber__c = i;
    q.Required__c = true;
    insert q;
    return q.id;        
  }
  
  private String getType(Integer i){
    if      (i==1)
     return 'Multi-Select--Vertical';
    else if (i==2)
     return 'Single Select--Vertical';
    else if (i==3)
     return 'Free Text';
    else
     return 'Single Select--Horizontal';
  }
  private String getChoices(Integer i){
    if (i == 0)
        return 'one\ntwo\nthree\n';
    if (i == 1)
        return 'four\nfive\nsix\n';
    if (i == 2)
        return 'seven\neight\nnine\n';

        
    return '';
  }  
  
  private void createResponses()
  {
    Account accountObject = new Account();
    accountObject = [SELECT Id from Account where Master_Account_Flag__c = true limit 1];  
    Contact c = new Contact();
    try{
        c = [Select Id From Contact where Email=:'surveyForceAppUser@survey.force'];
    }
    catch (Exception e)
    {
    c.LastName = 'Doe';
    c.FirstName = 'Jane';
    c.AccountId = accountObject.Id;
    c.Email = 'surveyForceAppUser@survey.force';
    insert c;       
    }
    
    SurveyTaker__c st = new SurveyTaker__c();
    st.Contact__c = c.Id;
    st.Survey__c = testSurvey.Id;
    st.Taken__c = 'false';
    insert st;
    
    for (Integer i = 0; i < 4; i ++)
    {
        SurveyQuestionResponse__c r = new SurveyQuestionResponse__c();
        if (i == 0) {
            r.Response__c = 'two';
        } else if (i == 1) {
            r.Response__c = 'four';
        } else if (i == 2) {
            r.Response__c = 'nine';
        } else {
            r.Response__c = 'This is a response.';
        }
        Survey_Question__c sq = [Select id from Survey_Question__c where id=: questionIds[i] limit 1];
        r.Survey_Question__c = sq.id;
        r.SurveyTaker__c = st.Id;
        insert r;   
    }

  }
  
  private static testmethod void testGettingStarted()
  {
      List<Survey__c> surveys = [select Id, Name From Survey__c where Name='SurveyForce Sample Survey'];
      GettingStartedController gsc = new GettingStartedController();
      if (surveys.size() >=1)
      {
        System.assertEquals(true,gsc.testSurveyAvailable);
      }
      else
      {
        System.assertEquals(false,gsc.testSurveyAvailable);
      }
      gsc.makeTestSurvey();
      gsc.takeSurvey();
      gsc.viewResults();
      gsc.viewSurvey();
      
      
      List<Survey__c> surveys2  = [select Id, Name From Survey__c where Name='SurveyForce Sample Survey'];
      System.assertEquals(surveys.size() + 1, surveys2.size());
      System.assertEquals(true,gsc.testSurveyAvailable);
     
      
  }

}